// 使用wifi进行网络连接并打印网络信息

#include <stdio.h>
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"

//替换为自己的wifi信息
#define WIFI_SSID "youssid"  
#define WIFI_PASS "youpass"



// 事件回调函数
void  test_event_cb(void* event_handler_arg,esp_event_base_t event_base,int32_t event_id,void* event_data)
{
    if(event_base==WIFI_EVENT && event_id == WIFI_EVENT_STA_START)
    {
        esp_wifi_connect();
    } else if (event_base==IP_EVENT && event_id == IP_EVENT_ETH_GOT_IP)
    {
        ip_event_got_ip_t* get_ip_info = (ip_event_got_ip_t*)event_data;
        esp_ip4_addr_t ip =  get_ip_info->ip_info.ip;
        printf("get ip success!" IPSTR "\n",IP2STR(&ip));

    };

};


// wifi初始化
void init_wifi()
{   
    // 初始化nvs
    nvs_flash_init();

    // 初始化网络协议栈
    esp_netif_init();

    // 创建事件循环
    esp_event_loop_create_default();

    // 创建wifi_sta接口
    esp_netif_create_default_wifi_sta();

    // 注册WIFI事件
    esp_event_handler_instance_t wifi_event_handler;
    esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,test_event_cb,NULL,&wifi_event_handler);

    // 注册IP事件
    esp_event_handler_instance_t ip_event_handler;
    esp_event_handler_instance_register(IP_EVENT,IP_EVENT_ETH_GOT_IP,test_event_cb,NULL,&ip_event_handler);

    // 初始化wifi
    wifi_init_config_t wifi_cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&wifi_cfg);

    // 设置为sta模式
    esp_wifi_set_mode(WIFI_MODE_STA);

    // 设置连接的ssid信息
    wifi_config_t wifi_ssid_info = {
        .sta.ssid = WIFI_SSID,
        .sta.password = WIFI_PASS
    };
    esp_wifi_set_config(WIFI_IF_STA, &wifi_ssid_info);
    esp_wifi_start();
};

// 打印 Wi-Fi 信息
void print_wifi_info() {
    wifi_config_t wifi_config;
    esp_wifi_get_config(ESP_IF_WIFI_STA, &wifi_config);

    esp_netif_ip_info_t ip_info;
    esp_netif_t* netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
    if (netif && esp_netif_get_ip_info(netif, &ip_info) == ESP_OK) {
        ESP_LOGI(TAG, "Wi-Fi SSID: %s", (char*)wifi_config.sta.ssid);
        ESP_LOGI(TAG, "Wi-Fi Password: %s", (char*)wifi_config.sta.password);
        ESP_LOGI(TAG, "IP Address: " IPSTR, IP2STR(&ip_info.ip));
    } else {
        ESP_LOGE(TAG, "Failed to get IP information");
    }
};


void app_main(void)
{
    init_wifi();

    while (1)
    {
        vTaskDelay(pdMS_TO_TICKS(500));
    }
    
}


